#include "stm32f10x.h"                  // Device header
#include "Delay.h"

#include "LED.h"
#include "Key.h"
#include "OLED.h"
#include "CountSensor.h"

int main(void)
{
	// 初始化
	OLED_Init();
	CountSensor_Init();
	
	// 待机模式 和 停止模式都需要 PWR 外设: 设置PWR外设的寄存器, 进而 WFI 会根据寄存器的值进入停止模式 或 待机模式
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
	
	while(1)
	{
		OLED_ShowNum(1, 7, CountSensor_Get(), 5);
		
		// Running 闪烁
		OLED_ShowString(2, 1, "Running");
		Delay_ms(100);
		OLED_ShowString(2, 1, "       ");
		Delay_ms(100);
		
		// 进入停止模式
		// 参数1: 电压转换器是开启还是低功耗
		// 参数2: 底层是调用 WFI 还是调用 WFE 进入低功耗模式
		// 注意: 首次进入停止模式之前, 系统时钟为 HSE * 9 = 72MHz, 在进入停止模式被唤醒后时钟切换为 HSI 内部时钟 频率为 8MHz
		//       所以 Running 会闪烁的很慢。只需要在唤醒后重新调用 SystemInit 配置 HSE 主频即可。
		PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);
		SystemInit();
	}
}